package cn.tedu.d1_thread;
/**多线程案例实践：
 * 4个售票窗口，总计100张
 * 方法一
 * */
public class Test3_SaleTickets {
    public static void main(String[] args) {
        //创建线程对象
        TicketsThread t1=new TicketsThread("一号窗口");
        TicketsThread t2=new TicketsThread("二号窗口");
        TicketsThread t3=new TicketsThread("三号窗口");
        TicketsThread t4=new TicketsThread("四号窗口");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        /*
        问题1:为啥一共买了400张？
        需要把成员变量设置成静态的，可以被多个对象共享
         */
    }
}

class TicketsThread extends Thread{

    static int tickets=100;

    public TicketsThread(String name){
        super(name);
    }

    //把业务写在run()方法里
    @Override
    public void run() {
        //一直卖票，直到卖完
        /*
         问题2:
         卖出了0和-1，超卖现象

         问题3:
         产生了重卖，即一张票从多个窗口卖出，卖给了多人

         */
        while (true){
            try {
                Thread.sleep(10);//让程序休眠10毫秒
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //卖票
            System.out.println(getName()+"="+tickets--);

            if(tickets<=0) break;

        }
    }
}


